package Consultas;

import java.sql.Connection;
import java.sql.DriverManager;
import com.mysql.jdbc.ResultSet;
import com.mysql.jdbc.Statement;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author USUARIO WINDOWS
 */
public class Logica {

    public Statement sentencia;
    public ResultSet resultadoLogeo;
    public ResultSet resultadoP;
    public Connection conexion;
    public int idAdmin;
    public int idEmple;
    public Float[] precioProductos;
    public Integer[] idProveedores;
    public Integer[] idProductos;
    public Integer[] idClientes;
    public Integer []garantia;
    public String []descripcion;
    public Integer [] idCategoria;
    
        public Integer[] idCompra;
        public Integer[] estado ;
        public Date []fecha;
        public Integer[] idEmpleado;
        public Integer[] idProveedor;
        public Float[] total;
    
     public int getIdEmple() {
        return idEmple;
    }

    public void setIdEmple(int idEmple) {
        this.idEmple = idEmple;
    }
    
    
    
    public int getIdAdmin() {
        return idAdmin;
    }

    public void setIdAdmin(int idAdmin) {
        this.idAdmin = idAdmin;
    }

    public Connection getConexion() {
        return conexion;
    }

    public boolean crearConexion() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conexion = DriverManager.getConnection("jdbc:mysql://localhost:3306/moto_locura", "root", "root");
        } catch (SQLException ex) {
            ex.printStackTrace();
            return false;
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
            return false;
        }

        return true;
    }

    public Logica() {
        crearConexion();
        try {
            sentencia = (Statement) conexion.createStatement();
        } catch (SQLException ex) {
            Logger.getLogger(Logica.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public boolean buscarEmpleado(String id, String contrasena) {

        String nombre = "'" + id + "'";
        String consulta9 = "SELECT e.idPersona FROM empleado e JOIN persona p ON e.idPersona=p.idPersona WHERE e.contrasena=" + contrasena + " AND p.nombre=" + nombre + " AND e.cargo='Administrador'";

        try {
            resultadoLogeo = (ResultSet) sentencia.executeQuery(consulta9);

        } catch (SQLException ex) {
            Logger.getLogger(Logica.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            while (resultadoLogeo.next()) {

                this.idAdmin = resultadoLogeo.getInt(1);
                resultadoLogeo.close();

                return true;
            }
            return false;
        } catch (SQLException ex) {
            Logger.getLogger(Logica.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;

    }

    public String[] obtenerProveedores() throws SQLException {

        String consulta = "select p.nombre,p.idProveedor From proveedor p";
        ResultSet resultadoP = (ResultSet) sentencia.executeQuery(consulta);
        resultadoP.last();
        int tamano = resultadoP.getRow();
        String[] proveedores = new String[tamano];
        idProveedores = new Integer[tamano];
        resultadoP.beforeFirst();
        int cont = 0;
        while (resultadoP.next()) {
            proveedores[cont] = resultadoP.getString("nombre");
            idProveedores[cont] = resultadoP.getInt(2);
            cont++;

        }
        resultadoP.close();
        return proveedores;
    }

    public String[] obtenerProductos() throws SQLException {

        String consulta = "select p.nombre,p.precioEstandar,p.idProducto From producto p";
        ResultSet resultadoP = (ResultSet) sentencia.executeQuery(consulta);
        resultadoP.last();
        int tamano = resultadoP.getRow();
        String[] productos = new String[tamano];
        precioProductos = new Float[tamano];
        idProductos = new Integer[tamano];
        resultadoP.beforeFirst();
        int cont = 0;
        while (resultadoP.next()) {
            productos[cont] = resultadoP.getString("nombre");
            precioProductos[cont] = resultadoP.getFloat(2);
            idProductos[cont] = resultadoP.getInt(3);
            cont++;

        }
        resultadoP.close();
        return productos;
    }

    public String[] obtenerClientes() throws SQLException {

        String consulta = "select c.idCliente From cliente c";
        ResultSet resultadoP = (ResultSet) sentencia.executeQuery(consulta);
        resultadoP.last();
        int tamano = resultadoP.getRow();
        String[] clientes = new String[tamano];
        idClientes = new Integer[tamano];
        resultadoP.beforeFirst();
        int cont = 0;
        while (resultadoP.next()) {
            clientes[cont] = resultadoP.getString("nombre");
            idClientes[cont] = resultadoP.getInt(2);
            cont++;

        }
        resultadoP.close();
        return clientes;
    }

    public void ingresarCompra(Double total, int idAdmin, int idProveedor) throws SQLException {

        String consulta = "INSERT INTO compra (estado, fecha, subtotal, IVA, total, Empleado_idPersona, Proveedor_idProveedor) "
                + "VALUES ('0','" + obtenerFecha() + "','" + calcularSubtotal(total) + "','" + calcularIva(total) + "','" + total + "','" + idAdmin + "','" + idProveedor + "')";

        sentencia.executeUpdate(consulta);
    }

    public void ingresarDetalleCompra(Double total, int cantidad, int idProveedor, Double precioUnitario, int idProducto) throws SQLException {

        String consulta = "INSERT INTO detalle_compra (fechaCompra, cantidad, precioUnitario, precioTotal, idProducto, idProveedor,idCompra) "
                + "VALUES ('" + obtenerFecha() + "','" + cantidad + "','" + precioUnitario + "','" + total + "','" + idProducto + "','" + idProveedor + "','" + obtenerUltimaCompra() + "')";
        System.out.println(consulta);
        sentencia.executeUpdate(consulta);
    }

    public void ingresarVenta(Double total,int idEmple, int idCliente) throws SQLException {

        String consulta = "INSERT INTO venta (fechaVenta,saldoPendiente, subTotal, IVA, totalVenta,idCliente, Empleado_idPersona) "
                + "VALUES ('" + obtenerFecha() + "','0','" + calcularSubtotal(total) + "','" + calcularIva(total) + "','" + total+ "','" + idCliente + "','" + idEmple + "')";
        System.out.println(consulta);
        sentencia.executeUpdate(consulta);
    }
     public void ingresarDetalleVenta(Double total, int cantidad,int idProducto, Double precioUnitario) throws SQLException {

        String consulta = "INSERT INTO detalle_venta (idVenta,cantidad,idProducto,precioUnitario,precioTotal) "
                + "VALUES ('" + obtenerUltimaVenta()+ "','" + cantidad + "','" + idProducto + "','" + precioUnitario + "','" + total + "' )";
        System.out.println(consulta);
        sentencia.executeUpdate(consulta);
    }

     public void agregarCliente (String a, int idPersona) throws SQLException{
      
         String consulta = "INSERT INTO cliente (tipo,idPersona) "
                + "VALUES ('" + a + "','" + idPersona + "' )";
        System.out.println(consulta);
        sentencia.executeUpdate(consulta);
         
     }
     
     
     
    public String obtenerFecha() {

        Calendar calendario = Calendar.getInstance();
        String dia = Integer.toString(calendario.get(Calendar.DATE));
        String mes = Integer.toString(calendario.get(Calendar.MONTH));
        String annio = Integer.toString(calendario.get(Calendar.YEAR));
        String fecha = "" + annio + "-" + mes + "-" + dia;

        return fecha;
    }

    public Double calcularSubtotal(Double total) {

        Double subtotal = total - total * .16;
        return subtotal;

    }

    public Double calcularIva(Double total) {
        Double iva = calcularSubtotal(total) * .16;
        return iva;

    }

    public int obtenerUltimaCompra() throws SQLException {

        String consulta = "select c.idCompra From compra c";
        ResultSet resultadoP = (ResultSet) sentencia.executeQuery(consulta);
        resultadoP.last();
        int idCompra = resultadoP.getInt(1);
        return idCompra;
    }

     public int obtenerUltimaVenta() throws SQLException {

        String consulta = "select v.idVenta From venta v";
        ResultSet resultadoP = (ResultSet) sentencia.executeQuery(consulta);
        resultadoP.last();
        int idVenta = resultadoP.getInt(1);
        return idVenta;
    }
  public String[] obtenerPedidosEspera() throws SQLException {

        String consulta = "select c.idCompra,c.estado,c.fecha,c.total,c.Empleado_idPersona,c.Proveedor_idProveedor From compras c";
        ResultSet resultadoP = (ResultSet) sentencia.executeQuery(consulta);
        resultadoP.last();
        int tamano = resultadoP.getRow();
        String[] pedidos = new String[tamano];
        idCompra = new Integer[tamano];
        estado = new Integer[tamano];
        fecha= new Date[tamano];
        total= new Float[tamano];
        idEmpleado= new Integer [tamano];
        idProveedor= new Integer [tamano];
        resultadoP.beforeFirst();
        int cont = 0;
        while (resultadoP.next()) {
       
             // for (int i = 0; i < estado.length; i++) {
             //     if(estado[i]==0){
                 
                      idCompra [cont]=resultadoP.getInt(1);
                        estado [cont]= resultadoP.getInt(2);
                      fecha [cont]=resultadoP.getDate(3);
                      total [cont]=resultadoP.getFloat(6);
                   idEmpleado [cont]=resultadoP.getInt(7);
                   idProveedor [cont]= resultadoP.getInt(8); 
        //} }
            cont++;

        }
        resultadoP.close();
        return pedidos;
    }
  
  
  
    public boolean buscarEmpleadoE(String id, String contrasena) {

        String nombre = "'" + id + "'";
        String consulta9 = "SELECT e.idPersona FROM empleado e JOIN persona p ON e.idPersona=p.idPersona WHERE e.contrasena=" + contrasena + " AND p.nombre=" + nombre + " AND e.cargo='Empleado'";

        try {
            resultadoLogeo = (ResultSet) sentencia.executeQuery(consulta9);

        } catch (SQLException ex) {
            Logger.getLogger(Logica.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            while (resultadoLogeo.next()) {

                this.idEmple= resultadoLogeo.getInt(1);
                resultadoLogeo.close();

                return true;
            }
            return false;
        } catch (SQLException ex) {
            Logger.getLogger(Logica.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;

    }
  
   public String[] obtenerGarantia() throws SQLException {

        String consulta = "select g.idGarantia, g.descripcion From garantia g";
        ResultSet resultadoP = (ResultSet) sentencia.executeQuery(consulta);
        resultadoP.last();
        int tamano = resultadoP.getRow();
        String[] garantias = new String[tamano];
        garantia = new Integer[tamano];
        descripcion = new String[tamano];
        resultadoP.beforeFirst();
        int cont = 0;
        while (resultadoP.next()) {
            garantias[cont] = resultadoP.getString("descripcion");
            garantia[cont] = resultadoP.getInt(1);
            cont++;

        }
        resultadoP.close();
        return garantias;
    }
  
     public String[] obtenerCategoria() throws SQLException {

        String consulta = "select c.idCategoria, c.descripcion From categoria_producto c";
        ResultSet resultadoP = (ResultSet) sentencia.executeQuery(consulta);
        resultadoP.last();
        int tamano = resultadoP.getRow();
        String[] categorias = new String[tamano];
        idCategoria = new Integer[tamano];
        descripcion = new String[tamano];
        resultadoP.beforeFirst();
        int cont = 0;
        while (resultadoP.next()) {
            categorias[cont] = resultadoP.getString("descripcion");
            idCategoria[cont] = resultadoP.getInt(1);
            cont++;

        }
        resultadoP.close();
        return categorias;
    }
}
